#coding:utf8
from rest_framework import serializers
from django_redis import get_redis_connection
# serializers.ModelSerializer           必须有模型
# serializers.Serializer

# 因为数据不需要入库， 而且也没有关联的模型 Serializer
class RegisterSmscodeSerializer(serializers.Serializer):

    """
    验证
    1.字段类型的验证
    2.字段选项的验证
    3.单个字段验证
    4.多个字段验证
    """

    text = serializers.CharField(max_length=4,min_length=4,required=True,label='图片验证码')
    image_code_id = serializers.UUIDField(label='uuid')


    # 用户的图片验证码 获取redis的图片验证码
    def validate(self, attrs):

        # query_params -->data -->attrs

        #1. 用户的图片验证码
        text = attrs.get('text')

        image_code_id = attrs.get('image_code_id')
        #2.获取redis的图片验证码
        #连接redis
        redis_conn = get_redis_connection('code')

        #获取redis的数据
        redis_text = redis_conn.get('img_%s'%image_code_id)
        #时效
        if redis_text is None:
            raise serializers.ValidationError('图片验证码以过期')

        #3. 比较
        # redis的数据是bytes类型
        # 统一大小写
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('输入的验证码不一致')


        return attrs

